package main

import "math"


//Definition for a binary tree node.
type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}


// 比较简单，就是后序遍历。
func findTilt(root *TreeNode) int {
	// 结果
	rst := 0
	// 所有坡度之和，就是后序遍历了
	var dfs func(node *TreeNode) int

	dfs = func(node *TreeNode) int {
		// 递归终止条件
		if node == nil {
			return 0
		}
		leftNum := dfs(node.Left)
		rightNum := dfs(node.Right)
		// 计算当前的坡度
		rst += int(math.Abs(float64(leftNum - rightNum)))
		// 返回当前节点树的节点个数
		return leftNum + rightNum + node.Val
	}

	dfs(root)
	return rst
}
